home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume2 / unix / shel301a.3 < prev    next >
Internet Message Format  |  1988-12-06  |  34KB

  1. Path: xanth!ames!ncar!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v02i089:  shell - csh-like shell v3.01a, Part03/03
  5. Message-ID: <10490@swan.ulowell.edu>
  6. Date: 5 Dec 88 22:33:45 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 1153
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: PERUGIA@ICNUCEVM.BITNET (Cesare Dieni)
  12. Posting-number: Volume 2, Issue 89
  13. Archive-name: unix/shell301a.3
  14.  
  15. #    This is a shell archive.
  16. #    Remove everything above and including the cut line.
  17. #    Then run the rest of the file through sh.
  18. #----cut here-----cut here-----cut here-----cut here----#
  19. #!/bin/sh
  20. # shar:    Shell Archiver
  21. #    Run the following text with /bin/sh to create:
  22. #    shell.doc
  23. # This archive created: Mon Dec  5 17:26:07 1988
  24. cat << \SHAR_EOF > shell.doc
  25.  
  26.         INSTRUCTIONS FOR SHELL Version: 3.01A 17-Nov-88
  27.         ===============================================
  28.  
  29.   Contents
  30.   --------
  31.  
  32.     I.    Description
  33.     II.   Overview of Major features
  34.     III.  Restrictions
  35.     IV.   PIPES
  36.     V.    Command Pre-processor
  37.     VI.   Command Line Editing
  38.     VII.  Function Keys
  39.     VIII. Shell Commands
  40.     IX.   Special Set Variables
  41.     X.    Advanced Topics
  42.     XI.   Example login file
  43.     XII.  Example script file
  44.     XIII. Default values
  45.  
  46. O.  Changes over version 3.00A
  47.     --------------------------
  48.  
  49. - Fixed bug with strings: before it printed strings with lenght 1 more
  50.   than specified lenght.
  51. - Made some additions and corrected many errors in Shell.doc (this file).
  52. - Modified handler of external commands to allow things like DATE "?"
  53.   (always use quotes).
  54. - Corrected cat: it didn't work with STDIN before.
  55.  
  56. I.  Description
  57.     -----------
  58.  
  59. This version of Shell is the follow of:
  60.     Shell V2.04 (C)Copyright 1986, Matthew Dillon, All Rights Reserved
  61.     Shell V2.04M-V2.07M by Steve Drew
  62.     Shell V2.08MI and V3.xxA by Carlo Borreo & Cesare Dieni
  63.  
  64. Send suggestions/criticism/anything else to Carlo Borreo or Cesare Dieni at:
  65.  
  66.     BITNET:  PERUGIA@ICNUCEVM.BITNET    
  67.  
  68. or
  69.     Carlo Borreo        Cesare Dieni
  70.     Via G. Berio 34        Via G. Taddei 3
  71.     I-18100 Imperia        I-56100 Pisa
  72.     Italy            Italy
  73.  
  74. For older version: Steve Drew at:
  75.  
  76.         ENET:    CGFSV1::DREW
  77.         ARPA:    drew%cfgsv1.dec.com@decwrl.dec.com
  78.         USENET:  {decvax|decwrl}!cgfsv1.dec.com!drew
  79.  
  80. or
  81.         52 Castledale Cres N.E.
  82.         Calgary, Alberta
  83.         Canada
  84.  
  85. You may distribute this program for non-profit only.
  86.  
  87.  
  88. II. OVERVIEW
  89.     --------
  90.  
  91. Shell provides a convient AmigaDos alternative command interface.
  92. All its commands are internal and thus does not rely on the c:
  93. commands for any functionality.
  94.  
  95. Major features include:
  96.  
  97.     -command line editing
  98.     -shell & Amigados search path support
  99.     -simple history
  100.     -redirection of any command
  101.     -piping
  102.     -aliases
  103.     -variables & variable handling (embedded variables)
  104.     -file name expansion via conventional wild carding ('?', '*' and more)
  105.     -conditionals (if/else ect..)
  106.     -source files  (w/ gotos and labels)
  107.     -many built in commands to speed things up
  108.  
  109.  
  110. III. RESTRICTIONS
  111.      ------------
  112.  
  113.     o AmigaDos execute command will not work. Alternative is to use shell
  114.       own script language (which is more powerful) or to do a 'run execute'.
  115.     o This version runs UNDER WORKBENCH 1.2 or 1.3.
  116.     o VDK handler has a bug with setting file dates so when using the copy
  117.       command and VDK you should use the -d switch otherwise your file date
  118.       in vdk: will be bad. (This is not a bug with shell)
  119.     o If using with conman it may be best to start shell with the -a switch
  120.       (shell -a .login) to turn off shell's command line editing and use
  121.       conmans instead.
  122.  
  123.  
  124. IV. NOTES ON PIPES
  125.     --------------
  126.  
  127.     PIPES have been implimented using temporary RAM: files.  Thus, you
  128.     should be careful when specifying a 'ram:*' expansion as it might
  129.     include the temp. files.  These files are deleted on completion of
  130.     the pipe segment.
  131.  
  132.     The file names used are completely unique, even with multiple shell
  133.     running simultaniously.
  134.  
  135.     My favorite new feature is the fact that you can now redirect to and
  136.     from, and pipe internal commands.  'echo charlie >ram:x', for
  137.     instance.  Another favorite:
  138.  
  139.        echo "echo mem | shell" | shell
  140.  
  141.     To accomplish these new features, I completely re-wrote the command
  142.     parser in execom.c
  143.  
  144.     NO BCPL program should be output-append redirected (>>).
  145.  
  146.  
  147. V.  COMMAND PRE-PROCESSOR
  148.     ---------------------
  149.  
  150.     Preprocessing is done on the command line before it is passed on to
  151.     an internal or external routine:
  152.  
  153.     ^c    where c is a character is converted to that control character.
  154.         Thus, say '^l' for control-l.
  155.  
  156.     $name    where name is a variable name.  Variable names can consist of
  157.         0-9, a-z, A-Z, and underscore (_).  The contents of the
  158.         specified variable is used.  If the variable doesn't exist,
  159.         the specifier is used.  That is, if the variable 'i' contains
  160.         'charlie', then '$i' -> 'charlie'.  If the variable 'i' doesn't
  161.         exist, then '$i'->'$i' .
  162.  
  163.     ;    delimits commands.   echo charlie ; echo ben.
  164.  
  165.     ' '    (a space). Spaces delimit arguments.
  166.  
  167.     "string" a quoted string.  For instance, if you want to echo five spaces
  168.         and an 'a':
  169.  
  170.         echo      a       -> a
  171.         echo "    a"      ->      a
  172.  
  173.     \c    overide the meaning of special characters.  '\^a' is a
  174.         circumflex and an a rather than control-a.  To get a backslash,
  175.         you must say '\\'.
  176.  
  177.         also used to overide alias searching for commands.
  178.  
  179.     >file    specify output redirection.  All output from the command is
  180.         placed in the specified file.
  181.  
  182.     >>file    specify append redirection (Does not work with BCPL programs).
  183.  
  184.     <file    specify input redirection. The command takes input from the
  185.         file rather than the keyboard (note: not all commands require
  186.         input; it makes no sense to say 'echo <charlie' since
  187.         the 'echo' command only outputs its arguments).
  188.  
  189.     |    PIPE specifier.  The output from the command on the left becomes
  190.         the input to the command on the right.  The current SHELL
  191.         implimentation uses temporary files to store the data.
  192.  
  193.     !!    execute the previously executed command.
  194.     !nn    (nn is a number).  Insert the history command numbered n (see
  195.         the HISTORY command)
  196.     !partial search backwards through the history list for a command which
  197.         looks the same as 'partial', and execute it.
  198.  
  199.     #    Enter comment.  The rest of the line is discarded (note: \#
  200.         will, of course, overide the comment character's special
  201.         meaning)
  202.  
  203.  
  204. VI. COMMAND LINE EDITING
  205.     --------------------
  206.  
  207.     o Command line can be upto 255 chars.
  208.     o Inserts and deletes are handled correctly over multiple screen lines.
  209.     o Shell will keep track of the line width should the window get resized.
  210.  
  211.     KEY DEFINITIONS:
  212.         Up Arrow    Recal previous commands
  213.         Down Arrow  Recal commands
  214.         Left Arrow  Move cursor about command line.
  215.         Right Arrow  "     "      "      "      "
  216.         Shift-Up Arrow    Get start of history
  217.         Shift-Down Arrow   "  end   "     "
  218.         Shift-Left Arrow  Moves cursor a bit left
  219.         Shift-Right Arrow   "     "    "  "  right
  220.         ^A        Toggle insert/overtype mode.
  221.         ^D        EOF
  222.         ^E        Put cursor at end of text.
  223.         ^K        Delete to end of line.
  224.         ^R        Retype current line.
  225.         ^U        Erase entire line.
  226.         ^X        Erase entire line.
  227.         ^Z        Put cursor at start of text.
  228.         f1 - f10    Execute command if variable exists.
  229.         F1 - F10    More commands (Shifted f keys).
  230.         Help        Invokes help command
  231.  
  232.  
  233. VII. FUNCTION KEYS
  234.      -------------
  235.  
  236.     Function keys now insert text to the current position on the command
  237.     line. They maybe terminated with a ^M (return). f1 would be non shifted
  238.     where as F1 is shifted.
  239.     Most of functions key have a default definition, but it may be changed.
  240.  
  241.       $ set f1 dir df0:^M
  242.  
  243.     will add the text 'dir df0:<return>' to the current line.
  244.  
  245.       $ set f1 dir
  246.  
  247.     would only add 'dir' you could then enter ' df0:<return>'
  248.  
  249.  
  250. VIII. SHELL COMMANDS
  251.       ---------------
  252.  
  253.    First to start shell from a CLI
  254.  
  255.    shell [-a] [-c command;command]
  256.  
  257.    where:
  258.     -a disables all command line editing features. This is useful for
  259.     when running shell over AUX:.
  260.  
  261.     -c allows execution of one command line and then exits out of shell.
  262.     This is useful for running a internal shell commands in the
  263.     background or from an external application. eg:
  264.  
  265.         Run shell -c dir df0:; copy -r df0: df1: >nil:; echo "Done"
  266.  
  267.     If you 'Run' shell in the background without the -c switch shell
  268.     will detect this and imediatley exit.
  269.  
  270.  
  271.    Command execution:
  272.  
  273.    Internal shell commands maybe abreviated.
  274.  
  275.    The first argument is the command-name... if it doesn't exist in the
  276.    list below and isn't an alias, it is assumed to be an external (disk)
  277.    command. At this point the shell pathing, and AmigaDos pathing is checked
  278.    in order to locate the command.
  279.  
  280.    AUTOMATIC SOURCING may be accomplished by naming shell scripts with a
  281.    .sh suffix.  Thus, if you say 'stuff' and the file 'stuff.sh' exists in
  282.    your current or C: directory or anywhere in Shell search path, it will
  283.    be SOURCED with any arguments you have placed in the $_passed variable.
  284.    This is equivalent to typing 'source stuff.sh'
  285.  
  286.    Wild card expansions:
  287.     Most shell commands will accept multiple arguments that can
  288.     be as a result of wild card expansion. Also when the calling
  289.     an external command shell will first expand any wild cards
  290.     to seperate arguments. If you wish to have the external command
  291.     handle it's own wild carding you will need to insert quotes
  292.     around the special wild card characters ? and *.
  293.  
  294.     eg.
  295.         arc a new.arc *.txt    - shell will expand and pass to arc
  296.         arc a new.arc "*.txt"    - let arc expand the wild cards.
  297.  
  298.     Wild card expansions:
  299.  
  300.     ?    match any single character
  301.     *    match any string
  302.     .../*    recursive search down ALL sub directories from current level
  303.     !    Exclude pattern matching specifier
  304.     &    prefixed to patterns, ask confirmation for each file
  305.  
  306.     Examples:
  307.  
  308.     df0:.../*        all files in all directories on df0:
  309.     df0:.../!*.info     full directory tree of df0: but exclude
  310.                 any ugly .info files.
  311.     !*.o !*.c        will result in ALL files matching since what
  312.                 doesn't match the !*.o will match the !*.c
  313.     df1:&*            all files in root of df1:, but ask 
  314.                 confirmation for each
  315.  
  316.     LIST OF COMMANDS:
  317.     -----------------
  318.  
  319.     ABORTLINE
  320.     Usage    : abortline
  321.     Example : echo a;abort;echo b
  322.     Results    : a
  323.  
  324.     Causes the rest of the line to be aborted. Intended for use in
  325.     conjunction with exception handling.
  326.  
  327.     ADDBUFFERS
  328.     Usage    : addbuffers drive buffers
  329.     Example : addbuffers df0: 24
  330.  
  331.     Just like AmigaDOS addbuffer command, causes new buffers to be
  332.     allocated for disk I/O. Each buffer costs 512 bytes of CHIP memory.
  333.  
  334.     ALIAS
  335.     Usage    : alias [name [command string] ]
  336.     Example : alias vt "echo Starting VT100;run sys:tools/vt100"
  337.  
  338.     Sets a name to be a string. You can alias a single name to a set
  339.     of commands if you enclose them in quotes as above. By simply
  340.     typing vt, the command line above would be executed.
  341.  
  342.     Argument Passing to an Alias:
  343.  
  344.     Usage    : alias name "%var [command string]"
  345.     Example : alias xx "%q echo hi $q, how are ya."
  346.           xx Steve
  347.     Results : hi Steve, how are ya.
  348.  
  349.     The second form of the alias command allows passing of arguments
  350.     to any position within the command string via use of a variable
  351.     name. To pass arguments to the end of a command string this method
  352.     is actually not necessary.
  353.  
  354.     Typing "alias name" you will get the alias for that name, while with
  355.     "alias" you get a list of all alias.
  356.  
  357.     ASET
  358.     Usage    : aset name value
  359.     Example : aset INCLUDE include:
  360.  
  361.     Set a variable in a way that is compatible with Aztec SET command;
  362.     this is completely different from Shell variable.
  363.     May even be used to set ARP variables.
  364.  
  365.     ASSIGN
  366.     Usage    : assign [logical [physical] ]
  367.     Example : assign C: df1:c
  368.  
  369.     Use it like AmigaDOS assign command to set, remove or list
  370.     assignments of logical names to directories.
  371.  
  372.     CAT
  373.     Usage    : cat [-n][file file....]
  374.     Example : cat foo.txt
  375.  
  376.     Type the specified files onto the screen.  If no file is specified,
  377.     STDIN in used.  CAT is meant to output text files only.
  378.     Specifying -n option you will get numbered lines.
  379.  
  380.     CD
  381.     Usage    : cd [path]
  382.     Example : cd df0:devs/printers
  383.  
  384.     Change your current working directory.  You may specify '..' to go
  385.     back one directory (this is a CD specific feature, and does not
  386.     work with normal path specifications).
  387.  
  388.     CD without any arguments displays the path of the directory you
  389.     are currently in.
  390.  
  391.     CLOSE
  392.     Usage    : close filenumber
  393.  
  394.     Close the specified file opened by open.
  395.     See open and flist for more info.
  396.  
  397.     COPY
  398.     (CP)
  399.     Usage    : copy [-u][-d] file file
  400.     or    : copy [-u][-d] file1 file2...fileN dir
  401.     or    : copy [-r][-u][-d] dir1 dir2...dirN dir
  402.     options :
  403.         -r    recursive, copy all subdirectories as well.
  404.         -u    update, if newer version exist on dest, don't copy
  405.         -d    don't set destination file date to that of source.
  406.  
  407.     Example : copy -r df0: df1:
  408.  
  409.     Copy files or directories. When copying directories, the -r option
  410.     must be specified to copy subdirectories as well.  Otherwise, only
  411.     top level files in the source directory are copied.
  412.  
  413.     All files will be displayed as they are copied and directory's
  414.     displayed as they are created. This output can be suppessed by
  415.     redirecting to nil: eg. copy -r >nil: df0: df1:
  416.  
  417.     Copy will abort after current file on Control-C.
  418.  
  419.     Copy by default sets the date of the destination file to that of
  420.     the source file. To overide this feature use the -d switch.
  421.  
  422.     Another useful option is the -u (update) mode were copy will not
  423.     copy any files which exists already in the destination directory
  424.     if the destination file is newer or equal to the source file.
  425.     This is useful when developing code say in ram: eg. 'copy *.c ram:'
  426.     when done you can copy -u ram: df1: and only those modules you have
  427.     modified will be copied back.
  428.  
  429.     Copy command will now create the destination directory if it does
  430.     not exist when specified as 'copy [-r] dir dir'. If you specify
  431.     copy file file file dir, then 'dir' must already exist.
  432.  
  433.     CP
  434.     Equivalent to copy.
  435.  
  436.     DEC
  437.     Usage    : dec varname [value]
  438.     Example : dec abc
  439.  
  440.     Decrement the numerical equivalent of the variable with specified
  441.     value (default: 1) and place the ASCII-string result back into
  442.     that variable.
  443.  
  444.     DELETE
  445.     (RM)
  446.     Usage    : delete [-p][-r] file file file...
  447.     Example : delete foo.txt test.c
  448.  
  449.     Remove (delete) the specified files.  Remove always returns
  450.     errorcode 0.  You can remove empty directories.  The '-r' option
  451.     will remove non-empty directories by recursively removing all sub
  452.     directories.
  453.     You can remove delete-protected files specifying -p option.
  454.     If you specify any wildcard deletes the files will be listed as
  455.     they are deleted. This can be suppressed by redirecting to nil:
  456.  
  457.     DIR
  458.     (LS)
  459.     Usage    : dir [-sdf] [path path ... ]
  460.     Example : dir df0:
  461.     options :
  462.         -s  short multi(4) column display.
  463.         -d  list directories only
  464.         -f  list files only
  465.  
  466.     Displays a directory of specified files. Default output shows
  467.     date, protection, block size, byte size and total space used.
  468.     Protections flags include new 1.2/1.3 flags (see under protect).
  469.     Files are alphabetically sorted, without case sensitivity, and
  470.     directories are always in red pen.
  471.  
  472.     DISKCHANGE
  473.     Usage    : diskchange drive
  474.  
  475.     Like AmigaDOS diskchange.
  476.  
  477.     ECHO
  478.     Usage    : echo [-n] string
  479.     Example : echo hi there
  480.     Results : hi there
  481.  
  482.     Echo the string given. If -n switch given no newline is
  483.     appended.
  484.  
  485.     ELSE ;
  486.     Usage    : else ; command
  487.     Usage    : if -f foo.c ; else ; echo "Not there" ; endif
  488.  
  489.     Else clause, must follow an IF statement.
  490.  
  491.     ENDIF
  492.     Usage    : endif
  493.  
  494.     The end of an if statement.
  495.  
  496.     Note: if you return from a script file with unterminated IF's
  497.     and the last IF was false, prompt will be changed to an
  498.     underscore ('_') and no commands will be executed until
  499.     'endif' is typed.
  500.  
  501.     FAULT
  502.     Usage    : fault error1 .. errorN
  503.     Example : fault 205 212
  504.  
  505.     Like AmigaDOS fault, prints specified error messages.
  506.  
  507.     FILENOTE
  508.     Usage: filenote file1 .. filen  note
  509.  
  510.     Set AMIGADOS comment of the specified file. This is not very useful,
  511.     since in current implementation of Shell file comments are not listed
  512.     in directory, but it was so easy to implement...
  513.  
  514.     FLIST
  515.     Usage    : flist
  516.  
  517.     Lists the filenumbers of files opened by open.
  518.     See open and close for more info.
  519.  
  520.     FOREACH
  521.     Usage    : foreach varname ( strings ) command
  522.     Example : foreach i ( a b c d ) "echo -n $i;echo \" ha\""
  523.     Result    : a ha
  524.           b ha
  525.           c ha
  526.           d ha
  527.  
  528.     'strings' is broken up into arguments.  Each argument is placed in
  529.     the variable 'varname' in turn and 'command' executed.  To execute
  530.     multiple commands, place them in quotes.
  531.  
  532.     Foreach is especially useful when interpreting passed arguments in
  533.     an alias.
  534.  
  535.     eg.
  536.         foreach i ( *.pic ) viewilbm $i
  537.     assuming a.pic and b.pic in current directory the following commands
  538.     will occur:
  539.         viewilbm a.pic
  540.         viewilbm b.pic
  541.  
  542.     FOREVER
  543.     Usage    : forever command
  544.     or    : forever "command;command;command..."
  545.  
  546.     The specified commands are executed over and over again forever.
  547.  
  548.     -Execution stops if you hit ^C
  549.     -If the commands return with an error code.
  550.  
  551.    GOTO
  552.     Usage    : goto label
  553.     Example :
  554.           label start
  555.             echo "At start"
  556.             dir ram:
  557.             goto start
  558.  
  559.     Goto the specified label name.  You can only use this command from a
  560.     source file. Labels may now be forward or reverse from current
  561.     position.
  562.  
  563.     HELP
  564.     Usage    : help
  565.     Example : help
  566.  
  567.     Simply displays all the available commands.  The commands are
  568.     displayed in search-order.  That is, if you give a partial name
  569.     the first command that matches that name in this list is the one
  570.     executed.  Generally, you should specify enough of a command so that
  571.     it is completely unique.
  572.  
  573.     HISTORY
  574.     Usage    : history [partial_string]
  575.     Example : history
  576.  
  577.     Displays the enumerated history list.  The size of the list is
  578.     controlled by the _history variable.  If you specify a partial-
  579.     string, only those entries matching that string are displayed.
  580.  
  581.     HOWMANY
  582.     Usage    : howmany
  583.  
  584.     This command tells you how many instances of Shell are running
  585.     in your system.
  586.  
  587.     HTYPE
  588.     Usage    : htype file1 .. filen
  589.  
  590.     Displays the specified files in hex and ASCII, just like the system
  591.     command Type file opt h. Especially suitable for binary files.
  592.  
  593.     IF
  594.     Usage    : if [-n] argument conditional argument ;
  595.     or    : if [-n] argument
  596.     or    : if [-n] -f file
  597.     or    : if [-n] -d file/dir
  598.     or    : if [-n] -m
  599.     or    : if [-n] -t file file1 .. fileN
  600.     or    : if [-n] -r rpnexpression
  601.  
  602.     If a single argument is something to another argument.  Conditional
  603.     clauses allowed:
  604.  
  605.     <, >, =, and combinations (wire or).  Thus <> is not-equal, >=
  606.     larger or equal, etc...
  607.  
  608.     If arguments are not numeric, they are compared as strings.
  609.  
  610.     Usually the argument is either a constant or a variable ($varname).
  611.  
  612.     The second form if IF is conditional on the existance of the argument.
  613.     If the argument is a "" string, then false , else TRUE.
  614.  
  615.     The third form of IF used by -f switch checks for existance of
  616.     the specified file.
  617.  
  618.     Switch -d tests the type of the object specified: if it is a
  619.     directory, then TRUE; if it is a file (or it doesn't exist)
  620.     then FALSE.
  621.  
  622.     Switch -m is used to test if FAST memory is present, i.e. wheter
  623.     more than 512K RAM are available.
  624.     Example (to be included in a login.sh file):
  625.     if -m; resident -a as ln cc; endif
  626.  
  627.     Using -t form compares the date and time of the first file with
  628.     all the others; if the first is younger than ALL the others, then
  629.     FALSE, else TRUE. If a file doesn't exists, it is considered as
  630.     being older.
  631.     This feature is especially useful for building makefiles without
  632.     using any MAKE utility.
  633.     Example:
  634.     if -t test.o test.asm test.i ; asm -o test.o test.asm ; endif
  635.  
  636.     Option -r evaluates a given RPN expression (see under RPN for more
  637.     info): if value on top of stack is 0, then FALSE, else TRUE.
  638.  
  639.     Switch -n (NOT) reverses the result.
  640.  
  641.     When using 'IF' command interactively if you are entering commands
  642.     following an 'IF' that was false, the prompt will be set to a
  643.     underscore '_ ' to indicate all commands will be ignored until
  644.     an 'ELSE' or 'ENDIF' command is seen.
  645.  
  646.     INC
  647.     Usage    : inc varname [value]
  648.     Example : inc abc 5
  649.  
  650.     Increment the numerical equivalent of the variable with specified
  651.     value (default: 1) and place the ascii-string result back into
  652.     that variable.
  653.  
  654.     INFO
  655.     Usage    : info
  656.  
  657.     Display Device statistics for all the disk-type devices in system
  658.     (DFk:, HDk, JHk:, RAM:, RDk: ...), just like the system command
  659.     info. Gives block used/free, % used, errs, status and volume name.
  660.  
  661.     INPUT
  662.     Usage    : input var var ... var
  663.     Example : input abc
  664.  
  665.     Input from STDIN (or a redirection, or a pipe) to a variable.  The
  666.     next input line is placed in the variable.
  667.  
  668.     JOIN
  669.     Usage    : join [-r] file1..fileN destfile
  670.     Example : join part1 part2 part3 total
  671.  
  672.     Joins the specified files to get destfile. If destfile already
  673.     exists, an error message is generated and operation is aborted,
  674.     unless you specify -r (replace) option.
  675.  
  676.     LABEL
  677.     Usage    : label name
  678.  
  679.     Create a program label right here. Used in source files, can then
  680.     GOTO a label.
  681.  
  682.     LS
  683.     Equivalent to dir.
  684.  
  685.     MD
  686.     Equivalent to mkdir.
  687.  
  688.     MEM
  689.     Usage    : mem
  690.  
  691.     Display current memory statistics for CHIP memory and
  692.     FAST memory (if any installed).
  693.  
  694.     MKDIR
  695.     (MD)
  696.     Usage    : mkdir name name name...
  697.     Example : mkdir df0:stuff
  698.  
  699.     Create the specified directories.
  700.  
  701.     MV
  702.     Equivalent to rename.
  703.  
  704.     OPEN
  705.     Usage    : open filename filemode filenumber
  706.     Example : open RAM:data w 1
  707.  
  708.     This allows you to open a file, redirect to it as many commands
  709.     as you like, then close it.
  710.     Filename is any valid AmigaDOS filename, filemode is either r
  711.     for read or w for write, filenumber is a number between 1 and 10.
  712.     To redirect a program to or from an open file, use as your redir
  713.     filename a dot followed by the filenumber.
  714.     Here is a complete example:
  715.  
  716.         open RAM:data w 1
  717.         echo -n 2+2= >.1
  718.         rpn 2 2 + . CR >.1
  719.         close 1
  720.         type RAM:data    # will display 2+2=4
  721.     See also close, flist.
  722.  
  723.     PATH
  724.     Usage    : path
  725.  
  726.     Used to list AmigaDOS path. In current version can't be used to
  727.     set it.
  728.  
  729.     PRI
  730.     Usage    : pri clinumber pri
  731.     Example : pri 1 20
  732.  
  733.     Change the priority of the specified task (use PS command to
  734.     determine clinumber).
  735.  
  736.     PROTECT
  737.     Usage    : protect file1 ... filen [flags]
  738.     Example : protect myfile rwe
  739.  
  740.     Set AMIGADOS file protection flags for the file specified. Valid
  741.     flags are h, s, p, a, r, w, e, d.
  742.     If you don't specify the flags, all flags are cleared.
  743.     Bit 'a' is new to WorkBench 1.2, while 'h', 's', 'p' are new to 1.3.
  744.  
  745.     PS
  746.     Usage    : ps
  747.  
  748.     Gives status of DOS processes.  eg:
  749.  
  750.     Proc Command Name    CLI Type    Pri.  Address  Directory
  751.      1   SHELL        Initial CLI   0      97b0  Stuff:shell
  752.      2   sys:c/clockmem    Background  -10    2101a8  Workdisk:
  753.      3   c:emacs        Background    0    212f58  Stuff:shell
  754.      4   sys:c/VT100    Background    0    227328  Workdisk:
  755.  
  756.     Address is the addres of the task, directory is the process
  757.     currently CD'd directory.
  758.  
  759.     PWD
  760.     Usage    : pwd
  761.  
  762.     Rebuild _cwd by backtracing from your current directory.
  763.  
  764.     QUIT
  765.     Usage    : quit
  766.  
  767.     Quit out of Shell back to CLI.
  768.  
  769.     RBACK
  770.     Usage    : rback command
  771.  
  772.     Start a new process executing the specified command, but can't do
  773.     input/output. Equivalent to 'run command >NIL: <NIL:'.
  774.     This command is not fully reliable: use at your own risk.
  775.  
  776.     RENAME
  777.     (MV)
  778.     Usage    : rename from to
  779.     or    : rename from from from ... from todir
  780.  
  781.     Allows you to rename a file or move it around within a disk.
  782.     Allows you to move 1 or more files into a single directory.
  783.  
  784.     RESIDENT
  785.     Usage    : resident [-a][-r] [files]
  786.  
  787.     This is ARP resident. Commands are searched by Shell in resident
  788.     list BEFORE of searching on any external device.
  789.     Option -a loads RESIDENT programs, -r removes them.
  790.     Resident with no args lists resident programs.
  791.     Not all programs can run as resident, see ARP docs for more info.
  792.  
  793.     RETURN
  794.     Usage    : return [n]
  795.     Example : return 10
  796.  
  797.     Exit from a script file, or quit from shell with optional
  798.     exit code.
  799.  
  800.     RM
  801.     Equivalent to delete.
  802.  
  803.     RPN
  804.     Usage    : rpn expression
  805.     Example : rpn 3 7 * . CR    # Prints the value 21
  806.  
  807.     Evaluate an RPN expression. May be useful for simple calculations,
  808.     but needs some work to be really useful. Uses only 32-bit values.
  809.     Use "rpn help" to get a list of commands, with the number of
  810.     arguments and of results.
  811.     Here are some commands:
  812.  
  813.     .    Prints value on stack
  814.     CR    Prints a CR
  815.     STR    Use "STR string" to get a pointer to string on stack
  816.     LEN, STRCMP, SETVAR String operations
  817.  
  818.     RUN
  819.     Usage    : run prgm args
  820.     Example : run emacs test.c
  821.  
  822.     Start a new process executing the specified command.
  823.     In current implementation run command can't be redirected.
  824.     This command is not fully reliable: use at your own risk.
  825.     See also rback.
  826.  
  827.     SEARCH
  828.     Usage    : search [-w][-c][-n][-r][-e][-q] filelist string
  829.  
  830.     Search specified files for a string. Only lines containing the
  831.     specified strings are displayed.
  832.  
  833.     If you specify any directory in filelist, and use the -r (recurse)
  834.     switch, all files in directory are recursively searched.
  835.  
  836.     Lines are numbered for default; use -n (number) switch to turn off
  837.     line numbering.
  838.  
  839.     Search is normally not case sensitive; use -c (case) flag to turn ON
  840.     case sensitivity.
  841.  
  842.     By specifying -e (exclude) switch, only lines NOT containing the
  843.     specified string are listed.
  844.  
  845.     Using -w (wild) flag, only the lines matching with the string are
  846.     listed.
  847.     Notes to wild card matching;
  848.     - Uses Shell standard matching.
  849.     - Wild cards allowed are *, ?, !.
  850.     - Matching is not case sensitive (even if you use -c flag).
  851.     - The WHOLE line must match the string, not only a substring.
  852.     - String MUST be enclosed in quotes to avoid wildcard expansion
  853.  
  854.     Flag -q (quiet) suppresses printing of file names.
  855.  
  856.     Examples:
  857.         search -c -r df0:include ACCESS
  858.     Find all occurrencies of ACCESS (in uppercase) in all files
  859.     contained in include directory.
  860.         search -w shell.h "#define*"
  861.     Lists only lines of file beginning with (not simply containing)
  862.     #define.
  863.  
  864.     SET
  865.     Usage    : set [name] [string]
  866.     Example : set abc hello
  867.  
  868.     Set with no args lists all current variable settings.
  869.     Set with one arg lists the setting for that particular variable.
  870.     Specifying name and string, stores the string into variable name.
  871.  
  872.     Also See the section on special _variables.
  873.  
  874.  
  875.     SLEEP
  876.     Usage    : sleep timeout
  877.     Example : sleep 10
  878.  
  879.     Sleep for 'timeout' seconds, or until ^C typed.
  880.  
  881.     STACK
  882.     Usage    : stack [number]
  883.     Example : stack 8000
  884.  
  885.     Changes the default stack for this CLI. Without arguments, prints
  886.     it.
  887.  
  888.     STRHEAD
  889.     Usage    : strhead varname breakchar string
  890.     Example : strhead j . foobar.bas
  891.           echo $j
  892.     Result    : foobar
  893.  
  894.     Remove everything after and including the breakchar in 'string' and
  895.     place in variable 'varname'.
  896.  
  897.     STRINGS
  898.     Usage    : strings file1..fileN minlenght
  899.     Example : strings c:dir c:list shell 7
  900.  
  901.     Prints strings contained in specified files (usually binary)
  902.     with lenght >= minlenght.
  903.  
  904.     STRTAIL
  905.     Usage    : strtail varname breakchar string
  906.     Example : strtail j . foobar.bas ; echo $j
  907.     Result    : bas
  908.  
  909.     Remove everything before and including the breakchar in 'string' and
  910.     place in variable 'varname'.
  911.  
  912.     SOURCE
  913.     Usage    : source file [arguments]
  914.     Example : source mymake.sh all
  915.     Result    : source file 'mymake.sh' called with var _passed = 'all'
  916.  
  917.     Execute commands from a file.  You can create SHELL programs in
  918.     a file and then execute them with this command.  Source'd files
  919.     have the added advantage that you can have loops in your command
  920.     files (see GOTO and LABEL).  You can pass SOURCE files arguments
  921.     by specifying arguments after the file name.  Arguments are passed
  922.     via the _passed variable (as a single string).
  923.  
  924.     Automatic 'sourcing' is accomplished by placing a .sh extension on
  925.     the file and executing it as you would a C program:
  926.  
  927.     --------- file hello.sh ---------
  928.     foreach i ( $_passed ) "echo yo $i"
  929.     ---------------------------------
  930.  
  931.     $ hello a b c
  932.     yo a
  933.     yo b
  934.     yo c
  935.  
  936.     TYPE
  937.     Equivalent to CAT.
  938.  
  939.     TOUCH
  940.     Usage    : touch file1 .. fileN
  941.  
  942.     Sets DateStamp on the specified files to the current date and time.
  943.  
  944.     UNALIAS
  945.     Usage    : unalias name .. name
  946.     Example : unalias vt
  947.  
  948.     Delete aliases..
  949.  
  950.     UNSET
  951.     Usage    : unset name .. name
  952.     Example : unset abc
  953.  
  954.     Unset one or more variables.  Deletes them entirely.
  955.  
  956.     VER
  957.     Usage    : ver
  958.  
  959.     Show current version name, & authors.
  960.  
  961.     WINDOW
  962.     Usage    : window [-q][-f][-b][-l][-s] [dimensions]
  963.     Options    :
  964.         -f    (front) Window to front
  965.         -b    (back)  Window to back
  966.         -l    (large) Window to maximum size
  967.         -s    (small) Window to minimum size
  968.         -a    (activate)
  969.         -q    (query) Lists screens and windows open
  970.  
  971.     Various operations on CLI window. If dimensions are specified,
  972.     they must be in the form x y width height, with values separated
  973.     by spaces.
  974.     The command "window -l" may be very useful on PAL machines to
  975.     get a full PAL window from your login sequence.
  976.     Switching very fast back and forth from small to big window may
  977.     cause an apparent lock-up; in this case, just resize the window
  978.     with the mouse.
  979.  
  980.  
  981. IX. SPECIAL SET VARIABLES
  982.     ---------------------
  983.  
  984.     _prompt
  985.     This variable is set to the string you wish printeded as your
  986.     prompt. This can contain escape sequences if you wish, or
  987.     you can include a %p in path definition to get CD in your
  988.     prompt.
  989.     Default prompt shows path specification in red pen, followed by
  990.     a greater (>) sign and a space.
  991.     The if command will set the prompt to a '_ ' if commands are
  992.     disabled while waiting for a 'endif' or 'else' command. Interactive
  993.     mode only.
  994.  
  995.     _history
  996.     This variable is set to a numerical value, and specifies how far
  997.     back your history should extend.
  998.  
  999.     _debug
  1000.     Debug mode... use it if you dare.  must be set to some value
  1001.  
  1002.     _verbose
  1003.     Verbose mode (for source files).  display commands as they are
  1004.     executed.
  1005.  
  1006.     _maxerr
  1007.     The worst (highest) return value to date.  To use this, you usually
  1008.     set it to '0', then do some set of commands, then check it.
  1009.  
  1010.     _lasterr
  1011.     Return code of last command executed.  This includes internal
  1012.     commands as well as external comands, so to use this variables
  1013.     you must check it IMMEDIATELY after the command in question.
  1014.  
  1015.     _cwd
  1016.     Holds a string representing the current directory we are in from
  1017.     root.  The SHELL can get confused as to its current directory if
  1018.     some external program changes the directory.  Use PWD to rebuild
  1019.     the _cwd variable in these cases.
  1020.  
  1021.     _passed
  1022.     This variable contains the passed arguments when you SOURCE a file
  1023.     or execute a .sh file.  For instance:
  1024.  
  1025.     test a b c d
  1026.  
  1027.     -------- file test.sh ----------
  1028.     echo $_passed
  1029.     foreach i ( $_passed ) "echo YO $i"
  1030.     --------------------------------
  1031.  
  1032.     _path
  1033.     This variable contains the search path when the shell is looking
  1034.     for external commands.  The format is:  DIR,DIR,DIR  Each DIR must
  1035.     have a trailing ':' or '/'.  The current directory is always
  1036.     searched first.  The entire path will be searched first for the
  1037.     <command>, then for <command>.sh (automatic shell script sourcing).
  1038.  
  1039.     The default _path is set to
  1040.         ram:,ram:c/,df0:c/,df1:c/,df0:,df1:,sys:system/
  1041.  
  1042.     _insert
  1043.     Sets the default for insert/overtype mode for command line
  1044.     editing. ^A toggles between, but after <RET> the default is
  1045.     set back as indicated by this variable. By default _insert is 1
  1046.     indicating insert mode on setting to zero will make overtype
  1047.     the default.
  1048.  
  1049.     _width
  1050.     Indicates the console window width, 77 if unset.
  1051.     Will change automatically if the user resizes the window.
  1052.  
  1053.     _titlebar
  1054.     Used to set window's title bar.
  1055.  
  1056. X.  ADVANCED TOPICS
  1057.     ---------------
  1058.  
  1059.     EXCEPTION_PROCESSING:
  1060.  
  1061.     if no _except variable exists, any command which fails causes the
  1062.     rest of the line to abort as if an ABORTLINE had been executed.  If
  1063.     the _except variable exists, it is of the form:
  1064.  
  1065.     "nnn;commands..."
  1066.  
  1067.     where nnn is some value representing the minimum return code required
  1068.     to cause an error.  Whenever a command returns a code which is
  1069.     larger or equal to nnn, the commands in _except are executed before
  1070.     anything.  WHEN _except EXISTS, THE COMMAND LINE DOES NOT ABORT
  1071.     AUTOMATICALLY.  Thus, if you want the current line being executed
  1072.     to be aborted, the last command in _except should be an "abortline".
  1073.  
  1074.     exception handling is disabled while in the exception handling routine
  1075.     (thus you can't get into any infinite loops this way).
  1076.  
  1077.     Thus if _except = ";", return codes are completely ignored.
  1078.  
  1079.     example:
  1080.  
  1081.     set _except "20;abortline"
  1082.  
  1083. XI. EXAMPLE LOGIN FILE
  1084.     ------------------
  1085.  
  1086. From a CLI or the startup-script say 'SHELL filename'.  That file is
  1087. sourced first. Thus, 'SHELL .login' will set up your favorite aliases.
  1088.  
  1089. # -Steve's .login file- #
  1090.  
  1091. echo -n "Enter Date [DD-MMM-YY HH:MM] ";input new; DATE $new
  1092.  
  1093. # -------Function keys-------- #
  1094.  
  1095. set f1 "dir df0:"^M
  1096. set f2 "dir df1:"^M
  1097. set F1 "dir -s df0:"^M
  1098. set F2 "dir -s df1:"^M
  1099. set f3 info^M
  1100. set f4 ps^M
  1101.  
  1102. # ---------Quickies---------- #
  1103.  
  1104. alias print "%q copy $q prt:"
  1105. alias tosys "assign c: SYS:c"
  1106. alias toram "assign c: RAM:c;"
  1107. alias tomanx "assign c: MANX:c; manxinit"
  1108. alias wb "loadwb"
  1109. alias pref "sys:preferences"
  1110. alias cal "run sys:utilities/calculator"
  1111.  
  1112. # ------Applications---------- #
  1113.  
  1114. alias em "run emacs"
  1115. alias vt "run sys:c/VT100"
  1116.  
  1117. # --------Finish Up----------- #
  1118.  
  1119. ver ;echo -n "Shell loaded on ";date
  1120.  
  1121. XII.  Example Source file
  1122.       -------------------
  1123.  
  1124. # ---- MANXINIT.SH ------ #
  1125.  
  1126. aset INCLUDE AC:include
  1127. aset CCTEMP=ram:
  1128. md ram:lib
  1129. aset CLIB RAM:lib/
  1130. cp AC:lib/$libfile ram:lib"
  1131. alias cleanup "rm >NIL: -r ram:lib"
  1132.  
  1133. #run make in background at lower priority:
  1134. alias make "%q run ChangeTaskPri -5 +^J^J MAKE $q"
  1135.  
  1136. XIII.  Default Values
  1137.        --------------
  1138.  
  1139. To make things easier, some aliases are predefined whenever you start a
  1140. new Shell. These are:
  1141.  
  1142.     - cls
  1143.     Simply clear the screen.
  1144.  
  1145.     - cdir
  1146.     Use "cdir directory" to clear the screen, set CD to directory,
  1147.     and list it.
  1148.  
  1149.     - kr
  1150.     Deletes everything on RAM:. If you think this is dangerous,
  1151.     you can remove this alias.
  1152.  
  1153.     - exit
  1154.     Leave Shell and exit CLI.
  1155.  
  1156. Moreover, many variables have default values, and many function keys are
  1157. predefined. You can use set command to determine all of these.
  1158. SHAR_EOF
  1159. #    End of shell archive
  1160. exit 0
  1161. -- 
  1162. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  1163. Have five nice days.
  1164.